/*
 * PaymentProcessingSessionBean.java
 */
package session.stateless;

import entity.*;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author IS3102 ES4
 */
@Stateless
public class PaymentProcessingSessionBean implements PaymentProcessingSessionBeanRemote {

    @PersistenceContext
    private EntityManager em;
//    private Payment pm;
//    private IndividualSales is;
//    private OrganizationCust oc;
//    private IndividualCust ic;
//    private OrganizationSales os;
//    private Address add;
//    private Long addId;
//    private Customer cus;
//
//    //return delivery address
//    @Override
//    public Address returnDa(Long salesOrderId) {
//        is = em.find(IndividualSales.class, salesOrderId);
//        if (is == null) {
//            os = em.find(OrganizationSales.class, salesOrderId);
//            addId = os.getDeliveryAddId();
//            return em.find(Address.class, addId);
//        } else {
//            addId = is.getDeliveryAddId();
//            return em.find(Address.class, addId);
//        }
//    }
//
//    //return customer country
//
//    @Override
//    public String returnCountry(String email) {
//        cus = em.find(Customer.class, email);
//        add = em.find(Organization.class, cus.getRegNum()).getBillingAdd();
//        return add.getCountry();
//    }
//
//    @Override
//    public void updateOAPayment(Long salesOrderId, String paymentMode, String bankName, String bankBranch, String bankCountry) {
//        os = em.find(OrganizationSales.class, salesOrderId);
//        os.setPaymentMode(paymentMode);
//        os.setBankName(bankName);
//        os.setBankBranch(bankBranch);
//        os.setBankCountry(bankCountry);
//        os.setStatus("Awaiting");
//        Calendar cal = Calendar.getInstance();
//        if (paymentMode.equals("Cash-In-Advance")) {
//
//            cal.add(Calendar.DATE, +5);
//            os.setPaymentDue(cal);
//        } else {
//            Customer customer = em.find(Customer.class, os.getEmail());
//            int creditTerm = em.find(Organization.class, customer.getRegNum()).getCreditTerm();
//            cal.add(Calendar.DATE, +creditTerm);
//            os.setPaymentDue(cal);
//            // update outbound inventory
//            Collection<CheckoutItem> items = os.getCheckoutItems();
//            Iterator iter = items.iterator();
//            CheckoutItem item = null;
//            Long invId;
//            OutboundInventory oi = null;
//
//            // confirm all outbound inventories for this payment
//            while (iter.hasNext()) {
//                item = (CheckoutItem) iter.next();
//                invId = item.getInventoryId();
//                oi = em.find(OutboundInventory.class, invId);
//                oi.setConfirmFlag(true);
//                oi.setDateProcessed(cal.getTime());
//
//                em.merge(oi);
//            }
//        }
//
//        em.persist(os);
//    }
//
//    public void createIAPayment(
//            Long salesOrderId,
//            Double amt) {
//        try {
//            SalesOrder so = em.find(SalesOrder.class, salesOrderId);
//
//            // create a new payment and tag to sales order
//            Payment payment = new Payment();
//            Date today = new Date();
//            payment.create(
//                    "Credit Card", amt, today);
//
//            em.persist(payment);
//
//            Collection<CheckoutItem> items = so.getCheckoutItems();
//            Iterator iter = items.iterator();
//            CheckoutItem item = null;
//            Long invId;
//            OutboundInventory oi = null;
//            // confirm all outbound inventories for this payment
//            while (iter.hasNext()) {
//                item = (CheckoutItem) iter.next();
//                invId = item.getInventoryId();
//                oi = em.find(OutboundInventory.class, invId);
//                oi.setConfirmFlag(true);
//                oi.setDateProcessed(today);
//
//                em.merge(oi);
//            }
//
//            so.getPayment().add(payment);
//            //so.setPayment(payment);
//            so.setStatus("Paid");
//            payment.setSalesOrder(so);
//
//            em.merge(so);
//            em.merge(payment);
//
//        } catch (Exception ex) {
//            ex.printStackTrace();
//
//
//        }
//
//    }
//
//    public List<SalesOrder> getSelectedSalesOrder(Long salesOrderId) {
//        em.getEntityManagerFactory().getCache().evictAll();
//        Query query = em.createQuery("SELECT s FROM SalesOrder s WHERE s.salesOrderId = :inId");
//        query.setParameter("inId", salesOrderId);
//        return query.getResultList();
//    }
//
//    public List<Staff> getSelectedStaff(String email) {
//        em.getEntityManagerFactory().getCache().evictAll();
//        Query query = em.createQuery("SELECT s FROM Staff s WHERE s.email = :inId");
//        query.setParameter("inId", email);
//        return query.getResultList();
//
//    }
//
//    public List<Customer> getCus(String email){
//        em.getEntityManagerFactory().getCache().evictAll();
//        Query query = em.createQuery("SELECT s FROM Customer s WHERE s.email = :inId");
//        query.setParameter("inId", email);
//        return query.getResultList();
//    }
//
//    public List<Organization> getOrg(String regNum){
//        em.getEntityManagerFactory().getCache().evictAll();
//        Query query = em.createQuery("SELECT s FROM Organization s WHERE s.orgRegNum = :inRegNum");
//        query.setParameter("inRegNum", regNum);
//        return query.getResultList();
//    }
}
